www.gusucode.com > VC++ 获取宽带ADSL的账号与密码程序 > VC++ 获取宽带ADSL的账号与密码程序/code/until.cpp

    #if !defined(AFX_UNTIL_CPP_INCLUDED)
#define AFX_UNTIL_CPP_INCLUDED
#include <windows.h>
#include <process.h>
#include <Tlhelp32.h>
#include <Wtsapi32.h>
#include <wininet.h>
#pragma comment(lib,"Wtsapi32.lib")
#include"until.h"

DWORD GetProcessID(LPCTSTR lpProcessName){
	DWORD RetProcessID=0;
	HANDLE handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
	PROCESSENTRY32*info=new PROCESSENTRY32;
	info->dwSize=sizeof(PROCESSENTRY32);

	if(Process32First(handle,info)){
		if(_tcsicmp(info->szExeFile,lpProcessName)==0){
			RetProcessID=info->th32ProcessID;
			return RetProcessID;
		}
		while(Process32Next(handle,info)!=FALSE){
			if(_tcsicmp(info->szExeFile,lpProcessName)==0){
				RetProcessID=info->th32ProcessID;
				return RetProcessID;
			}
		}
	}
	return RetProcessID;
}

LPTSTR GetLogUserXP(){
	LPTSTR szLogName=NULL;
	DWORD dwSize=0;
	if(WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE,WTS_CURRENT_SESSION,WTSUserName,&szLogName,&dwSize)){
		LPTSTR lpUser=new TCHAR[256];
		_tcscpy(lpUser,szLogName);
		WTSFreeMemory(szLogName);
		return lpUser;
	}else return NULL;
}

LPTSTR GetLogUser2K(){
	DWORD dwProcessID=GetProcessID(_T("explorer.exe"));
	if(!dwProcessID)return NULL;
	BOOL fResult=FALSE;
	HANDLE hProc=NULL;
	HANDLE hToken=NULL;
	TOKEN_USER*pTokenUser=NULL;
	LPTSTR lpUserName=NULL;
	__try{
		// Open the process with PROCESS_QUERY_INFORMATION access
		hProc=OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,dwProcessID);
		if(hProc==NULL)__leave;
		fResult=OpenProcessToken(hProc,TOKEN_QUERY,&hToken);
		if(!fResult)__leave;

		DWORD dwNeedLen=0;
		fResult=GetTokenInformation(hToken,TokenUser,NULL,0,&dwNeedLen);
		if(dwNeedLen>0){
			pTokenUser=(TOKEN_USER*)new BYTE [dwNeedLen];
			fResult=GetTokenInformation(hToken,TokenUser,pTokenUser,dwNeedLen,&dwNeedLen);
			if(!fResult)__leave;
		}else __leave;
		SID_NAME_USE sn;
		TCHAR szDomainName[MAX_PATH];
		DWORD dwDmLen=MAX_PATH;

		DWORD nNameLen=256;
		lpUserName=new TCHAR[256];
		fResult=LookupAccountSid(NULL,pTokenUser->User.Sid,lpUserName,&nNameLen,
			szDomainName,&dwDmLen,&sn);
	}__finally{
		if(hProc)::CloseHandle(hProc);
		if(hToken)::CloseHandle(hToken);
		if(pTokenUser)delete[] pTokenUser;
	}
	return lpUserName;
}

LPTSTR GetCurrentLoginUser(){
	OSVERSIONINFOEX OsVerInfo;
	ZeroMemory(&OsVerInfo,sizeof(OSVERSIONINFOEX));
	OsVerInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX);
	if(!GetVersionEx((OSVERSIONINFO*)&OsVerInfo)){
		OsVerInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
		if(!GetVersionEx((OSVERSIONINFO*)&OsVerInfo))return NULL;
	}
	if(OsVerInfo.dwMajorVersion==5&&OsVerInfo.dwMinorVersion==0)return GetLogUser2K();
	else return GetLogUserXP();
}

#endif// !defined(AFX_UNTIL_CPP_INCLUDED)